using LightCAD.MathLib;
using System;
using System.Collections;
using System.Collections.Generic;


namespace LightCAD.Three
{
    public class IcosahedronGeometry : PolyhedronGeometry
    {

        #region constructor
        public IcosahedronGeometry(double radius = 1, double detail = 0)
            : base(makeVertices(), makeIndices(), radius, detail)
        {

            this.type = "IcosahedronGeometry";
            this.parameters = new PolyhedronGeometry.Parameters()
            {
                radius = radius,
                detail = detail
            };
        }

        private static ListEx<double> makeVertices()
        {
            var t = (1 + Math.Sqrt(5)) / 2;
            var vertices = new ListEx<double>() {
                    -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0,
                    0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t,
                    t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1
                };
            return vertices;
        }

        private static ListEx<int> makeIndices()
        {
            var indices = new ListEx<int>() {
                    0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11,
                    1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8,
                    3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9,
                    4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1
                };
            return indices;
        }
        #endregion
    }
}
